#============================================
# #知识点
# 多态指的是一类事物有多种形态，比如动物有多种形态：猫、狗、猪

class Animal: #同一类事物:动物
    def talk(self):
        pass
class Cat(Animal): #动物的形态之一:猫
    def talk(self):
        print('喵喵喵')
class Dog(Animal): #动物的形态之二:狗
    def talk(self):
        print('汪汪汪')
class Pig(Animal): #动物的形态之三:猪
    def talk(self):
        print('哼哼哼')

#实例化得到三个对象
cat=Cat()
dog=Dog()
pig=Pig()

cat.talk()
dog.talk()
pig.talk()

def Talk(animal):
    animal.talk()

Talk(cat)
Talk(dog)
Talk(pig)

#============================================
#但其实我们完全可以不依赖于继承，只需要制造出外观和行为相同对象，同样可以实现不考虑对象类型而使用对象，
# 这正是Python崇尚的“鸭子类型”（duck typing）：“如果看起来像、叫声像而且走起路来像鸭子，
# 那么它就是鸭子”。比起继承的方式，鸭子类型在某种程度上实现了程序的松耦合
#二者看起来都像文件,因而就可以当文件一样去用，然而它们并没有直接的关系
class Txt: #Txt类有两个与文件类型同名的方法，即read和write
    def read(self):
        print("读出一个数据")
    def write(self):
        pass

class Disk: #Disk类也有两个与文件类型同名的方法：read和write
    def read(self):
        print("读出一个数据")
    def write(self):
        pass
ojb1 = Disk()
ojb2 = Txt()
def read(ojb):
    ojb1.read()
read(ojb1)
read(ojb2)
#============================================